Accelerated processing units (APUs) contain computation elements that can consume much more power in the aggregate than the rated cooling capability of the systems in which they are deployed. Optimal power allocation to the various compute elements is necessary to increase system performance. However, optimal power allocation varies from workload to workload based on compute element utilization. For instance, a static allocation of power between central processing units (CPUs) and a graphics processing unit (GPU), (for example, an even power allocation between the CPUs and GPU), will result in low performance if the workload is only utilizing the CPU. In another example, greedy power allocation methods result in compute starvation for many heterogeneous workloads. It is also difficult and error-prone to try and dynamically analyze workload characteristics to determine the optimal power allocation.